package Segmentacao;

import java.awt.image.renderable.ParameterBlock;
import javax.media.jai.JAI;
import javax.media.jai.KernelJAI;
import javax.media.jai.PlanarImage;



public class Gradiente {

    public static PlanarImage calcularGradienteInterno (PlanarImage imagem) {

    float[] estrutura = {   0,   0,   0,   0,   0,   0,   0,
                            0,   1,   1,   1,   1,   1,   0,
                            0,   1,   1,   1,   1,   1,   0,
                            0,   1,   1,   1,   1,   1,   0,
                            0,   1,   1,   1,   1,   1,   0,
                            0,   1,   1,   1,   1,   1,   0,
                            0,   0,   0,   0,   0,   0,   0};

    // Aplicando operador erosao
    KernelJAI kernel = new KernelJAI(7,7,estrutura);
    ParameterBlock p = new ParameterBlock();
    p.addSource(imagem);
    p.add(kernel);
    PlanarImage erodida = JAI.create("erode",p);

    // Subtraindo as imagens
    ParameterBlock pb = new ParameterBlock();
    pb.addSource(imagem);
    pb.addSource(erodida);

    return JAI.create("subtract", pb);
    }

    public static PlanarImage calcularGradienteExterno (PlanarImage imagem) {

    float[] estrutura = {   0,   0,   0,   0,   0,   0,   0,
                            0,   1,   1,   1,   1,   1,   0,
                            0,   1,   1,   1,   1,   1,   0,
                            0,   1,   1,   1,   1,   1,   0,
                            0,   1,   1,   1,   1,   1,   0,
                            0,   1,   1,   1,   1,   1,   0,
                            0,   0,   0,   0,   0,   0,   0};

    // Aplicando operador dilatacao
    KernelJAI kernel = new KernelJAI(7,7,estrutura);
    ParameterBlock p = new ParameterBlock();
    p.addSource(imagem);
    p.add(kernel);
    PlanarImage dilatada = JAI.create("dilate",p);

    // Subtraindo as imagens
    ParameterBlock pb = new ParameterBlock();
    pb.addSource(dilatada);
    pb.addSource(imagem);
    
    return JAI.create("subtract", pb);      
    }

    public PlanarImage inverterGradiente (PlanarImage imagem) {
        return null;
    }

    public PlanarImage calcularGradienteMorfologico (PlanarImage imagem) {
        return null;
    }

    public static PlanarImage calculargradientes (PlanarImage imagem) {

        return JAI.create("gradientmagnitude", imagem, KernelJAI.GRADIENT_MASK_SOBEL_HORIZONTAL,
                KernelJAI.GRADIENT_MASK_SOBEL_VERTICAL);
    }

    public PlanarImage calcularGradienteAbsoluto (PlanarImage imagem) {
        return null;
    }

}

